機械学習で使う数学入門(社内勉強会)
社内勉強会で 機械学習で使う数学入門 の話をしました。
話した内容をブログにします。
目次
AI/ML/DL
本題の数学の話をする前に
- 人工知能(Artificial Intelligence: AI)
- 機械学習(Machine Learning: ML)
- 深層学習(Deep Learning: DL)
それぞれの違いをざっくり説明しました。
※詳しくは
あたりがとても勉強になります。
人工知能(AI)
一番大きな括りです。AI自体には確立した定義はありません。
が、大きく
- 汎用人工知能 … 様々な思考ができるもの。Pepperや Alexaなど
- 特化型人工知能 … 特定のタスクに特化したもの。AlphaGoや Roombaなど
に分かれます。
機械学習(ML)
MLは AIの1種 です。
与えられたデータから 規則性や法則を学習して、 それの学習結果を利用して 未知のものを予測する 技術を言います。
深層学習(DL)
DLは MLの1種 です。
深層学習は ニューラルネットワーク を利用・拡張して、高精度の予測を可能とした手法を言います。
機械学習(モデル)
一番シンプルな機械学習の問題を、どう数式にあらわすか説明しました。
MLの問題例
点の集まり(データ)が与えられたとき、 このデータから 未知の値を予測 する問題を考えてみます。
どう機械学習の問題を解くか
このような問題が与えられたとき、まず与えられた x,y
の特徴、関連をあらわす
モデル(model) を作成します。
直線 としてモデルを作成する場合は以下のような数式です。
- x :: 入力変数 (input variable)
- y :: 出力変数 (output variable)
- a :: パラメータ その1, 傾き
- b :: パラメータ その2, 切片
機械学習の問題の解き方をざっくりまとめると以下になります。
- 未知のものを予測するため に モデルを作成
- 作成した モデルのパラメータ ( 例の場合
a,b
)を決定
機械学習(目的関数)
目的関数の概要を説明しました。
どのようにモデルの良し悪しを測るか
直線のモデルを考えた場合、パラメータは a,b
(傾き、切片) を求めることになります。
a,b
を適当に決めたとき、そのモデルの良い・悪いはどう測ればいいでしょうか?
目的関数
この良い、悪いの 指標 を 目的関数 (objective function) と言います。 一般に 目的関数の値を 最小 するパラメータを探し出します。
以下で目的関数の具体例2つ記します。
目的関数の具体例1
直線と実際のデータ(点)の距離の和 を求める目的関数を考えてみます。
与えられたデータとモデルを以下のように定義します。
- 与えられたデータの個数:
N
- 与えられたデータ:
(x_1, y_1), (x_2, y_2), ... , (x_N, y_N)
- モデル:
y = ax + b
点と直線の( y
方向の距離) は絶対値を使って表せるので、
目的関数を L
とすると以下のようになります。
この L
を最小化するプロセスを 最小絶対値法 といいます。
目的関数の具体例2
直線と実際のデータ(点)の "距離の二乗" の和 を求める目的関数を考えてみます。
(一般には直線のパラメータ決定にはこちらがよく使われます)
先の例で距離を絶対値で表せましたが、二乗することで絶対値を外せます。
この L
を最小化するためのプロセスを 最小二乗法 と言います。
L
で使われている 変数, 定数 は以下になります。
a,b
… 求めたいパラメータ ( 変数 )x_n, y_n
… 観測されたデータ( 定数 )
この式は aに関する二次関数
、 そして bに関する二次関数
と見れるので、
微分(偏微分)可能 です。
これ(微分可能)が目的関数の最小化に役立ちます。
微分
目的関数の値を最小化することが機械学習のモデル の最適なパラメータ決定に役立ちます。
なぜ目的関数が微分可能であると、 嬉しい(最小化できる)のか、説明しました。
そもそも微分とは
微分とは グラフの変化の割合(傾き) を求めることを言い、 微分可能とは 傾きが求められること を言います。
微分でできること
微分で 最小値(最大値)を求める」 ことが出来ます。
先の直線モデルの目的関数は a
に関する 二次関数 でした。
この二次関数の微分値(傾き)を使って、 目的関数の値を最小化するために、パラメータをどちらに動かせばよいか が分かります。
勾配降下法
いまの内容を数式化します。 目的関数と、その微分を以下のように表します。
L = f(a)
f(a) の微分 = f'(a)
以下のプロセスで L
をどんどん小さくする a
を求めることができます。
微分 まとめ
微分は 目的関数の値を最小化するため に役立ちます。
目的関数の値を小さくするために、 パラメータを大きくするか/小さくするか をコンピュータが判断できるようになります。
線形代数
今まで 1入力 1出力のモデルを考えていました。
これが 1入力 2出力 や 2入力 4出力 , … 100入力 100出力 になったときに 線形代数の考えが役に立ちます。
線形代数の概要をざっくり説明しました。
線形代数とは
線型代数学(せんけいだいすうがく、英:linear algebra) とは、
線型空間
と線型変換
を中心とした理論を研究する代数学
の一分野である。– 引用: 線型代数学 | Wikipedia
とありますが、正直 (?) です。
それぞれの用語をざっくり説明すると以下になります。
- 代数学: 数の代わりに文字 (
x,y,z,A,B,C
など) を使って、 数の計算を表現すること -
線型空間: スカラ、ベクトル、 行列 、テンソルのこと
-
線型変換: 線形空間を使った計算のこと
要は行列計算です
線形代数でできること
複数の値を同時に扱える ことが線形代数のメリットです。
例えば入力 x
が x1,x2
と2つに増えた場合、以下のようにモデルを表現できます。
さらに出力 y
も y1,y2
と2つに増えた場合、以下のようにモデルを表現できます。
線形代数 まとめ
線形代数は 複数の値を同時に扱うため に役立ちます。 複数の入力・出力・パラメータを 上手に表現 できます。
確率・統計
観測されるデータの ばらつきの捉え方 や、 モデルの 定量的な評価 に確率・統計が役に立ちます。
確率・統計の以下主要なトピックについて、ざっくり説明しました。
- 条件付き確率/ベイズの定理
- 混合行列
(割愛) 平均、分散などの統計量
確率変数・確率分布
サイコロのそれぞれ目が出る確率を例して、用語を説明します。
出る目の取りうる値は 1,2,3,4,5,6
です。
この出る目( 事象 )の取りうる値を表した変数を 確率変数
この確率変数の取りうる値と、その確率を表した分布を 確率分布(下表) といいます。
確率変数の取りうる値 | 確率 |
---|---|
1 | 1/6 |
2 | 1/6 |
3 | 1/6 |
4 | 1/6 |
5 | 1/6 |
6 | 1/6 |
条件付き確率
条件付き確率は ある条件下で ある事象が発生する確率 を言います。
例えば以下の確率のことを言います。
- ある人が お店でお酒を買ったという条件下 で 併せて おつまみを買っている確率
条件付き確率の求め方として、まず 同時確率(それぞれが同時に発生する確率) の表を考えます。
おつまみを買わない | おつまみを買う | |
---|---|---|
お酒を買わない | 0.50 | 0.15 |
お酒を買う | 0.05 | 0.30 |
この表をつかって、条件付き確率は以下のように求められます。
- おつまみの有無に関わらず 、お酒を買う確率
- おつまみを買う かつ お酒を買う同時確率
を計算で使います
ベイズの定理
ベイズの定理は ある結果 y が生じたという条件の下で 原因が x である確率を求めることを言います。
以下のような数式で表されます。
利用例として スパムメール がよく挙げられます。
あるメールに単語 "sale", "market" といった単語が含まれていたときに そのメールがスパムメールである確率を計算できます。
ベイズの定理で、ある観測されたデータが どれだけ即しているか(尤もらしいか) を測ることができることが嬉しい点です。 この 尤もらしさ の指標を 尤度 と言います。
機械学習においては、モデルの最適なパラメータ を推定するために利用されます。
混同行列(Confusion Martix)
前述までとは違うトピックです。
混合行列は 機械学習モデルの予測の結果と、実際の結果を表にしたもの を言い、機械学習モデルの評価に役立ちます。
スパム判断モデルを例にとって混合行列を表すと以下になります。
スパムと予測 | 非スパムと予測 | |
---|---|---|
実際はスパム | 真陽性 (True Positive:TP) | 偽陰性 (False Negative:FN) |
実際は非スパム | 偽陽性 (False Positive:FP) | 真陰性 (True Negative:TN) |
この混合行列で行いたいことは 「 適合率 と 再現率 を計算して、 モデルの評価 を行う」です。
スパム判断モデルにおいて、 適合率/再現率は以下になります。
- 適合率: スパムと予測したメールが、_どれだけ本当にスパムか_
- 再現率: 本当にスパムだったメールのうち どれだけモデルの予測でカバーできているか
機械学習のモデルごとにそれぞれの目標値を定めて、 それを満たすようにパラメータをチューニングしていきます。
例えば、スパム判断においては スパムでないものをスパムを判断してほしくない
ことが一般的なので、適合率を高く目標設定します。
ある感染症の検査においては 陰性と判断したが、実は陽性だったケースを避けたい
ので、 再現率を高く目標設定します。
確率・統計 まとめ
入力されるデータ、予測される値を上手に評価するために 確率・統計の分野が役に立ちます。
- 条件付き確率/ベイズの定理
- 混合行列
- 平均、分散などの統計量
数学をどれくらい学ぶか
機械学習を始める前に どれぐらい数学準備すればいいか、 所感 を述べました。
とりあえず読もう
機械学習を始めるに当たって とりあえず読もう と思っている本がこちらです。
基本的にはここに出てくる数学の理解程度で良いと感じています。
数式
以下 大事だと思います
- 何が入力/出力、何がパラメータか
- 総和
∑
総乗Π
などの理解 - 対数
log
の理解(対数スケールで考えるメリットなど) - グラフから情報を読み取る
微分
以下 大事だと思います
- 微分(勾配) のざっくりとした理解
- 目的関数の最小化に役立つこと
以下 後回しでも良いと思います
- 踏み込んだ内容
- 合成関数の微分
- 偏微分など
線形代数
以下 大事だと思います
- 行列表現
- 簡単な行列計算
以下 後回しでも良いと思います
- 踏み込んだ内容
- テンソル
- 微分(偏微分)の行列表現
- ヤコビ行列
確率・統計
以下 大事だと思います
- モデルの定量的な評価
- 混合行列(適合率, 再現率)
- 統計量(平均, 分散など)
以下 後回しでも良いと思います
- ベイズの定理
- 尤度
自分の数学の勉強方法
数学の勉強方法はいろいろあります。 1つの参考として、自分の数学の勉強方法を共有します。
Chainerチュートリアル
チュートリアル — ディープラーニング入門:Chainer チュートリアル
機械学習で使う数学の基礎をざっくりと学べておすすめです。 本勉強会の内容・構成もこちらを大いに参考にしています。 もちろん数学だけではなく、機械学習の基礎も 実際の Notebookの実行環境を使って学ぶことができます。
Project Euler(プロジェクトオイラー)
プログラムで解く数学の問題集です( 日本語訳wikiはこちら ) 数学の問題を自分の好きな言語で解いて答えをサブミットします。
機械学習で使う数学 の知識が付くかと言われると微妙ですが、 プログラムで複雑な処理など、アルゴリズムを実装するスキルは付くと思います。
おわりに
以上、社内勉強会で話した内容です。
社内で数学の勉強会などしていますが、改めて数学を勉強すると結構楽しいです。
知識として重要なことはもちろん多いですが、数学的思考力は機械学習に限らず 多くの分野、普段の業務で役に立つと思っています。
少しでもどなたかのお役に立てば幸いです。